package com.projectName.www.util;

import com.projectName.www.po.User;

import javax.xml.datatype.DatatypeConstants;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

public class Beanutils {
    public static void populate(Object bean, Map<String,String[]> map) {

        /**
         * 1.获取传入对象的字节码文件
         * 2.获取map集合中的键值对
         * 3.调用class中getdeclatedFiel的方法将每一个值传入
         * 4.通过field对象种方法将每一个键传入
         * 5.异常处理
         */
        //通过JavaBean对象来获取对应的字节码对象

        Class clazz = bean.getClass();


        //获取Map中所有的key:

        Set keys = map.keySet();

        for (Object key : keys) {
            //key字段名，f字段，字段，value字段值
            //根据key来获取对应的Field对象
            try {
                  Field f = clazz.getDeclaredField(key.toString());

            f.setAccessible(true);

//            //map值为
//            System.out.println("---------------map----------------");
//            System.out.println(Arrays.toString(map.get(key)));
//            //字段为
//            System.out.println("-----------字段----------------");
//            System.out.println(f);
            //根据key来获取Map中对应的value

            Object value = map.get(key)[0];
                Integer valueint=null;
                BigDecimal valuemoney=null;
                Timestamp valuetime=null;

                if(f.getType()==int.class||f.getType()==Integer.class){
                    valueint=Integer.parseInt(value.toString());
                    f.set(bean,valueint);
                }else if(f.getType()==BigDecimal.class){
                    valuemoney=new BigDecimal(value.toString());
                    f.set(bean,valuemoney);
                }else if(f.getType()==Timestamp.class){
                    valuetime=new Timestamp(System.currentTimeMillis());
                    f.set(bean,valuetime);
                }
                else{
                    f.set(bean,value);
                }

            } catch (IllegalAccessException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }

    }
}